home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / docs / corsoguide / semafori-9.txt < prev    next >
Text File  |  1992-09-03  |  3KB  |  41 lines

  1. I semafori
  2.  
  3. E ci riferiamo naturalmente non a quelli dell'incrocio sotto casa; questo è
  4. un argomento che tratteremo data la sua importanza teorica, e non vi
  5. capiterà quasi mai di utilizzare i semafori direttamente, ma sempre mediante
  6. apposite funzioni del s.o. che verranno illustrate di volta in volta.
  7. In un sistema multitasking quale è l'Amiga, le risorse del sistema vengono
  8. condivise fra più task per cui bisogna far attenzione che, quando una
  9. risorsa viene utilizzata da un task, non deve essere accedibile da un
  10. altro; immaginate ad esempio cosa può succedere se, mentre un
  11. word-processor sta stampando un testo, un altro task che può essere un
  12. programma di grafica tenta di stampare anch'egli; in una tale evenienza i
  13. dati miscelandosi sulla parallela produrranno dei risultati catastrofici.
  14. Per cui vengono implementate dal sistema delle funzioni di bloccaggio e
  15. sbloccaggio (lock e unlock) e sono utilizzate dal task che deve
  16. rispettivamente appropiarsi della risorsa per usarla e una volta finito,
  17. rilasciarla al sistema; mentre la risorsa è bloccata nessun altro può
  18. accedervi finché non viene liberata. Bisogna stare attenti nell'utilizzo di
  19. queste funzioni di lock e unlock perché si entra facilmente nelle
  20. situazioni di stallo dette in inglese dead-lock; qualche tempo fa capitò
  21. proprio una situazione di questo tipo con una risorsa del sistema che tutti
  22. conoscete benissimo: il Blitter (ebbene sì lo ammetto, anche io sbaglio);
  23. in questa situazione ci si appropriava della risorsa mediante la funzione
  24. di bloccaggio relativa (OwnBlitter che vedremo in una delle prossime
  25. puntate) e prima di rilasciarla si utilizzava la funzione Text della
  26. graphics.library (scrive un testo specificato) che utilizza il Blitter per
  27. la scrittura del testo; il programma si bloccava, poiché per andare avanti
  28. attendeva il ritorno della funzione Text, ma quest'ultima allo stesso tempo
  29. attendeva che il Blitter venisse liberato.
  30. Il metodo per gestire le risorse è basato su questo principio ma è molto più
  31. efficiente: i semafori; infatti con il semplice bloccaggio della risorsa,
  32. non si assicura che tutti la possano utilizzare equamente, poiché se un
  33. processo si accorge che la risorsa è occupata e preferisce fare qualche
  34. altra cosa, al momento del rilascio della risorsa un altro task potrebbe
  35. controllare prima di lui e occuparla anche se ne aveva diritto il task di
  36. prima. I semafori non sono altro che liste che indicano quale sarà il task
  37. che ha diritto al prossimo utilizzo della risorsa; per cui la funzione di
  38. bloccaggio (come OwnBlitter che opera proprio in questo modo) se la risorsa
  39. non è libera, inserirà il task nella lista del semaforo e ne restituerà il
  40. controllo quando il processo ha effettivamente diritto di utilizzo.
  41.